package cn.rulian.base.main.controller;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.rulian.base.auth.bo.User;
import cn.rulian.base.auth.pojo.Sys;
import cn.rulian.base.auth.pojo.SysConfig;
import cn.rulian.base.auth.service.UserService;
import cn.rulian.base.common.dto.Message;
import cn.rulian.base.common.dto.UserInfo;
import cn.rulian.base.common.property.BusinessProperty;
import cn.rulian.base.common.util.Dm2;
import cn.rulian.base.common.util.MD5Util;
import cn.rulian.base.common.vo.TreeVo;
import cn.rulian.base.main.service.MainService;

/**
 * 登录Controller
 */

@Controller
@RequestMapping("/base/main")
public class MainController
{
	@Autowired
	MainService service;
	
	@Autowired
	UserService userService;

	@Autowired
	BusinessProperty pro; //业务参数
	
	private final Logger log = LoggerFactory.getLogger(getClass());
	
	/**
	 * @param sysmd 系统编码MD5，多系统改造时加入，用于当session失效时，识别是那一个系统。
	 * （1）当session已失效，这时刷新主页面时，传入了sysmd存在request中。
	 * （2）AuthInterceptor过滤时，发现失效，转发至noSession。由于是内部转发，参数不丢失。
	 * （3）在/noSession中，取出sysmd，以决定转向到哪一个登录页面。
	 */
	@RequestMapping("/index")
	public String index(@RequestParam(value="sysmd",required=true) String sysmd, HttpSession session)
	{
		//验证sysmd是否有效
		boolean have = false;
		for(Sys sys:SysConfig.list)
		{
			if(MD5Util.MD5(sys.getCode()).equals(sysmd))
			{
				have = true;
			}
		}
		if(!have)
		{
			return "base/main/404";
		}
		
		UserInfo userinfo = (UserInfo)session.getAttribute("userInfo");
		String sysmd_now = MD5Util.MD5(userinfo.getSys().getCode());
		if(!sysmd_now.equals(sysmd))
		{//如果不同，则说明已重新登录了其他系统，则定位到新系统的主页面
			return "redirect:/base/main/index?sysmd=" + sysmd_now;
		}
		return "theme/"+userinfo.getSys().getThemeCode()+"/index";
	}

	@RequestMapping("/main")
	public String main(HttpSession session)
	{
		UserInfo userinfo = (UserInfo)session.getAttribute("userInfo");
		return "theme/"+userinfo.getSys().getThemeCode()+"/main";
	}
	
	@RequestMapping("/getMenu")
	@ResponseBody
	public List<TreeVo> getMenu(HttpSession session)
	{
		UserInfo userinfo = (UserInfo)session.getAttribute("userInfo");
		return service.queryResourceByUserName(userinfo.getUser().getLoginName(),userinfo.getSys().getCode());
	}
	
	//修改密码页面
	@RequestMapping("/toUpdatePassword")
	public String toUpdatePassword() {
		return "base/main/updatePassword";
	}
	
	//修改密码
	@RequestMapping("/updatePassword")
	@ResponseBody
	public Message updatePassword(String password,String old_password,HttpSession session) 
	{
		Message rm = new Message();
		UserInfo userinfo = (UserInfo)session.getAttribute("userInfo");
		if(userinfo==null)
		{
			rm.setCode(Message._ERROR);
			rm.setMsg("登录失效！请重新登录。");
			return rm;
		}
		User user = userinfo.getUser();
		if(!user.getPassword().equals(MD5Util.MD5(old_password)))
		{
			rm.setCode(Message._ERROR);
			rm.setMsg("原始密码输入错误!!!");
			return rm;
		}
		user.setPassword(MD5Util.MD5(password));
		userService.save(user);
		rm.setMsg("密码修改成功！");
		log.info("密码修改成功！用户名：{}",user.getLoginName());
		return rm;
	}
	
	/**
	 * 显示机器码
	 */
	@RequestMapping("/showMachineNum")
	public String showMachineNum(Model model)
	{
		Dm2 dm =new Dm2();
		model.addAttribute("machineNum", dm.getMachineNum()); //机器码
		
		//当前版本信息
		String info = Dm2.getInfo();
		if(info == null)
		{
			dm.pass(pro.getKey());
			info = Dm2.getInfo();
		}
		model.addAttribute("info", info);
		
		return "base/main/machineNum";
	}
}
